package br.com.vendaext.gerencial.apresentacao;


import java.util.Collection;

import javax.faces.event.ActionEvent;
import javax.inject.Named;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.vendaext.gerencial.entidades.Modulo;
import br.com.vendaext.gerencial.integracao.ModuloDAO;
import br.com.vendaext.gerencial.util.ELutil;

@Named
@Component
@Scope("session")
public class MenuHome{
	
	private MenuModel menuModel;
	String urlSelecionado;
	
	@Autowired
	ModuloDAO dao;
	
	public Collection<Modulo> carregarModulos(){
		return dao.listar();
	}
	
	public Collection<Modulo> buscarFilhos(Modulo modulo){
		Criteria ct = dao.criarCriteria();
		ct.add(Restrictions.eq("pai", modulo));
		return ct.list();
	}
	
	public void carregarMenu(){
		if(menuModel==null){
		menuModel = new DefaultMenuModel();
		Collection<Modulo> mods = carregarModulos();
		for (Modulo modulo : mods) {
			if (modulo.getPai()==null){
				//Se não tem filho é um MenuItem
				Collection<Modulo> submenu = buscarFilhos(modulo);
				if(submenu.isEmpty()){
					MenuItem itemMenu = new MenuItem();
					itemMenu.setValue(modulo.getNome());
					itemMenu.getAttributes().put("pagina", modulo.getUrl());
					itemMenu.addActionListener(ELutil.createMethodActionListener("#{menuHome.changePageAction}", Void.TYPE, new Class[]{ActionEvent.class}));
					itemMenu.setAjax(true);
					itemMenu.setUpdate("conteudo");
					menuModel.addMenuItem(itemMenu);
				}else
				{
					
				}
				//Se tem filho varre a submenu
			}else{
				
			}
		}
		
		}
	}
	
	public MenuModel getMenuModel() {
		return menuModel;
	}

	public void setMenuModel(MenuModel menuModel) {
		this.menuModel = menuModel;
	}

	 public void changePageAction(ActionEvent event) {
	        try {
	        	
	        	//passa o nome do bean para dar um kill na sess�o dele        	
//	            System.out.println("pagina atual : " + paginaAtual);
	            MenuItem selectedMenuItem = (MenuItem) event.getComponent();
	            String pagina = selectedMenuItem.getAttributes().get("pagina").toString() ;
	            setUrlSelecionado(pagina);
	            
	            
	        } catch (Exception e) {
	            e.printStackTrace();
	        }

	    }
	
	public String getUrlSelecionado() {
		return urlSelecionado;
	}

	public void setUrlSelecionado(String urlSelecionado) {
		this.urlSelecionado = urlSelecionado;
	}
}
